package com.tsx.leetcode.hot100.easy;

import java.util.Arrays;

/**
 * <a href="https://leetcode.cn/problems/move-zeroes">移动0</a>
 * 1. 双指针
 * 2. 慢的指针始终作为设置值的游标
 * 3. 快的指针作为查到不为0的交换
 */
public class Q283MoveZeroes {
    public static void main(String[] args) {
        int[] nums = new int[]{0, 1, 0, 3, 12};
        moveZeroes(nums);
        System.out.println("nums = " + Arrays.toString(nums));
    }

    public static void moveZeroes(int[] nums) {
        int n = nums.length;
        int left = 0, right = 0; // right定0是因为要检查nums[0]
        while (right < n) { // 范围
            if (nums[right] != 0) { // 当右边的元素不为0的时候
                swap(nums, left, right); // 交换位置，把0放右边，左边是不为0的值
                left++; // 只有交换后left游标才会++
            }
            right++; // 无论如何right都要++
        }
    }

    public static void swap(int[] nums, int left, int right) {
        int temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp;
    }
}
